#######################################不可逆########################################
"""密码加密,不可逆转加密"""
import hashlib

def encryption(strs):
    md5 = hashlib.md5() #哈希加密
    md5.update(strs.encode("utf-8"))  #utf8转换
    strs = md5.hexdigest()  #转成十六进制
    return strs
#######################################不可逆########################################

########################################可逆########################################
"""加密解密,可逆转加密"""
from Crypto.Cipher import AES
import base64
from configCT.settings import the_key

def pkcs7padding(text):
    bs = AES.block_size
    ####tips：utf-8编码时，英文占1个byte，而中文占3个byte####
    length = len(text)
    bytes_length = len(bytes(text, encoding='utf-8'))
    padding_size = length if (bytes_length == length) else bytes_length
    ####################################################
    padding = bs - padding_size % bs
    padding_text = chr(padding) * padding    # tips：chr(padding)看与其它语言的约定，有的会使用'\0'
    return text + padding_text

def pkcs7padding_tobytes(text):
    return bytes(pkcs7padding(text), encoding='utf-8')

def pkcs7unpadding(text):
    length = len(text)
    unpadding = ord(text[length - 1])
    return text[0:length - unpadding]

#######AES加密，ECB模式#######
def get_aes_ecb(the_string):
    aes = AES.new(pkcs7padding_tobytes(the_key), AES.MODE_ECB)           # 初始化加密器
    encrypt_aes = aes.encrypt(pkcs7padding_tobytes(the_string))          # 进行aes加密
    encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8')   # 用base64转成字符串形式
    return encrypted_text

#######AES解密，ECB模式#######
def back_aes_ecb(the_string):
    aes = AES.new(pkcs7padding_tobytes(the_key), AES.MODE_ECB)             # 初始化加密器
    decrypted_base64 = base64.decodebytes(the_string.encode(encoding='utf-8'))  # 逆向解密base64成bytes
    decrypted_text = str(aes.decrypt(decrypted_base64), encoding='utf-8')       # 执行解密密并转码返回str
    decrypted_text_last = pkcs7unpadding(decrypted_text)                   # 去除填充处理
    return decrypted_text_last

# aa = get_aes_ecb("jKky06FHAtRo17GI9rRt9ECQVTFwUr5s")
# print(aa)
#
# bb = back_aes_ecb(aa)
# print(bb)
########################################可逆########################################

#######获取文件MD5值#######
def md5sum(filename, blocksize=65536):
    hash = hashlib.md5()
    with open(filename, "rb") as f:
        #必须是rb形式打开的，否则的两次出来的结果不一致
        for block in iter(lambda: f.read(blocksize), b""):
            hash.update(block)
    return hash.hexdigest()
